package com.ruoyi.serve.service.impl;

import com.ruoyi.common.utils.SpecGroupUtils;
import com.ruoyi.market.domain.dto.SkuCouponsDto;
import com.ruoyi.product.domain.vo.Activity;
import com.ruoyi.product.domain.vo.Coupon;
import com.ruoyi.product.domain.vo.SkuVo;
import com.ruoyi.serve.domain.dto.SkuInspirationDto;
import com.ruoyi.serve.domain.dto.VerInspirationDto;
import com.ruoyi.serve.mapper.VerInspirationMapper;
import com.ruoyi.serve.service.IVerInspirationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class VerInspirationServiceImpl implements IVerInspirationService {
    @Autowired
    private VerInspirationMapper verInspirationMapper;

    /**
     * @param verInspirationDto
     * @return
     */
    @Override
    public List<VerInspirationDto> pageList(VerInspirationDto verInspirationDto) {
        List<VerInspirationDto> list = verInspirationMapper.pageList(verInspirationDto);
        if (list == null || list.isEmpty()) {
            return new ArrayList<>();
        }
        // 存储返回数据
        Map<Long, VerInspirationDto> resultMap = new HashMap<>();
        Map<Long, Map<Long, SkuVo>> skuMap = new HashMap<>();

        for (VerInspirationDto item : list) {
            Long id = item.getId();
            // 封装主体
            if (!resultMap.containsKey(id)) {
                VerInspirationDto dto = new VerInspirationDto();
                dto.setId(item.getId());
                dto.setName(item.getName());
                dto.setUrl(item.getUrl());
                dto.setSkus(new ArrayList<>());

                resultMap.put(id, dto);
                skuMap.put(id, new HashMap<>());
            }

            // 封装skus
            if (item.getSkuId() != null) {
                Long skuId = item.getSkuId();
                Map<Long, SkuVo> skuVoMap = new HashMap<>();

                if (!skuMap.containsKey(skuId)) {
                    SkuVo skuVo = new SkuVo();
                    skuVo.setSkuId(item.getSkuId());
                    skuVo.setSpuId(item.getSpuId());
                    skuVo.setCode(item.getCode());
                    skuVo.setCategoryId(item.getCategoryId());
                    skuVo.setSpecData(item.getSpecData());
                    skuVo.setPrice(item.getPrice());
                    skuVo.setOriginalPrice(item.getOriginalPrice());
                    skuVo.setStock(item.getStock());
                    skuVo.setLowStock(item.getLowStock());
                    skuVo.setWeight(item.getWeight());
                    skuVo.setVolume(item.getVolume());
                    skuVo.setStatus(item.getStatus());
                    skuVo.setCreatedAt(item.getCreatedAt());
                    skuVo.setUpdatedAt(item.getUpdatedAt());
                    skuVo.setSpecNameGroup(SpecGroupUtils.processSpecNameGroup(item.getSpecNameGroupRaw()));
                    skuVo.setSpecValueGroup(SpecGroupUtils.processSpecValueGroup(item.getSpecValueGroupRaw()));
                    // 封装urls
                    if (item.getUrlsRaw() != null && !item.getUrlsRaw().trim().isEmpty()) {
                        // 处理URLs，按逗号分隔封装
                        List<String> urlList = new ArrayList<>();
                        String[] urls = item.getUrlsRaw().split(",");
                        for (String url : urls) {
                            if (url != null && !url.trim().isEmpty()) {
                                urlList.add(url.trim());
                            }
                        }
                        skuVo.setUrls(urlList);
                    }
                    // 封装返回
                    skuVoMap.put(skuId, skuVo);
                    resultMap.get(id).getSkus().add(skuVo);
                }
            }
        }
        return new ArrayList<>(resultMap.values());
    }

    /**
     * 获取灵感对应的商品
     *
     * @param inspirationId
     */
    @Override
    public List<SkuInspirationDto> getInspirationGoods(Long inspirationId) {
        List<SkuInspirationDto> list = verInspirationMapper.getInspirationGoods(inspirationId);

        if (list == null || list.isEmpty()) {
            return new ArrayList<>();
        }

        // 存储返回数据，按inspirationId分组
        Map<Long, SkuInspirationDto> resultMap = new HashMap<>();
        Map<Long, Map<Long, SkuCouponsDto>> skuMap = new HashMap<>();

        for (SkuInspirationDto item : list) {
            Long inspirationIdKey = item.getInspirationId();

            // 封装inspiration主体信息
            if (!resultMap.containsKey(inspirationIdKey)) {
                SkuInspirationDto dto = new SkuInspirationDto();
                dto.setInspirationId(item.getInspirationId());
                dto.setInspirationName(item.getInspirationName());
                dto.setInspirationUrl(item.getInspirationUrl());
                dto.setInspirationState(item.getInspirationState());
                dto.setInspirationDescription(item.getInspirationDescription());
                dto.setSkus(new ArrayList<>());

                resultMap.put(inspirationIdKey, dto);
                skuMap.put(inspirationIdKey, new HashMap<>());
            }

            // 封装SKU信息
            if (item.getSkuId() != null) {
                Long skuId = item.getSkuId();
                Map<Long, SkuCouponsDto> skuVoMap = skuMap.get(inspirationIdKey);

                if (!skuVoMap.containsKey(skuId)) {
                    SkuCouponsDto skuDto = new SkuCouponsDto();
                    skuDto.setSkuId(item.getSkuId());
                    skuDto.setSpuId(item.getSpuId());
                    skuDto.setCode(item.getCode());
                    skuDto.setCategoryId(null); // categoryId not available in SkuInspirationDto
                    skuDto.setSpecData(item.getSpecData());
                    skuDto.setPrice(item.getPrice());
                    skuDto.setOriginalPrice(item.getOriginalPrice());
                    skuDto.setStock(item.getStock());
                    skuDto.setLowStock(item.getLowStock());
                    skuDto.setWeight(item.getWeight());
                    skuDto.setVolume(item.getVolume());
                    skuDto.setStatus(item.getStatus() != null ? item.getStatus().longValue() : null);
                    skuDto.setSkuName(item.getSkuName());
                    skuDto.setDescription(item.getDescription());
                    skuDto.setCreatedAt(item.getCreatedAt());
                    skuDto.setUpdatedAt(item.getUpdatedAt());

                    // 处理规格组
                    skuDto.setSpecNameGroup(SpecGroupUtils.processSpecNameGroup(item.getSpecNameGroupRaw()));
                    skuDto.setSpecValueGroup(SpecGroupUtils.processSpecValueGroup(item.getSpecValueGroupRaw()));

                    // 处理图片URLs
                    if (item.getUrlRaw() != null && !item.getUrlRaw().trim().isEmpty()) {
                        List<String> urlList = new ArrayList<>();
                        String[] urls = item.getUrlRaw().split(",");
                        for (String url : urls) {
                            if (url != null && !url.trim().isEmpty()) {
                                urlList.add(url.trim());
                            }
                        }
                        skuDto.setUrls(urlList);
                    }

                    // 初始化优惠券和活动列表
                    skuDto.setCouponList(new ArrayList<>());
                    skuDto.setActivityList(new ArrayList<>());

                    skuVoMap.put(skuId, skuDto);
                    resultMap.get(inspirationIdKey).getSkus().add(skuDto);
                }

                // 处理优惠券信息
                if (item.getCouponId() != null) {
                    SkuCouponsDto skuDto = skuVoMap.get(skuId);
                    Coupon coupon = new Coupon();
                    coupon.setCode(item.getCouponCode());
                    coupon.setCouponGroupId(null); // 根据实际需要设置
                    coupon.setCouponStock(item.getCouponStock());
                    coupon.setCreateBy(null);
                    coupon.setCreateTime(null);
                    coupon.setEndTime(item.getCouponEndTime());
                    coupon.setGetTime(item.getGetTime());
                    coupon.setId(item.getCouponId());
                    coupon.setMinAmount(
                            item.getCouponMinAmount() != null ? item.getCouponMinAmount().doubleValue() : null);
                    coupon.setName(item.getCouponName());
                    coupon.setRemark(item.getCouponRemark());
                    coupon.setStartTime(item.getCouponStartTime());
                    coupon.setStatus(item.getCouponStatus() != null ? item.getCouponStatus().longValue() : null);
                    coupon.setType(item.getCouponType() != null ? item.getCouponType().longValue() : null);
                    coupon.setUpdateBy(null);
                    coupon.setUpdateTime(null);
                    coupon.setUseOrderId(null);
                    coupon.setUserId(3L); // 根据实际需要设置
                    coupon.setValue(item.getCouponValue() != null ? item.getCouponValue().doubleValue() : null);

                    skuDto.getCouponList().add(coupon);
                }

                // 处理活动信息
                if (item.getActivityId() != null) {
                    SkuCouponsDto skuDto = skuVoMap.get(skuId);
                    Activity activity = new Activity();
                    activity.setActivityId(item.getActivityId());
                    activity.setActivityName(item.getActivityName());
                    activity.setActivityType(
                            item.getActivityType() != null ? item.getActivityType().longValue() : null);
                    activity.setActivityStatus(
                            item.getActivityStatus() != null ? item.getActivityStatus().longValue() : null);
                    activity.setActivityDescription(item.getActivityDescription());
                    activity.setPosterUrl(item.getPosterUrl());
                    activity.setCreateTime(item.getActivityCreateTime());
                    activity.setUpdateTime(null);
                    activity.setType(0L); // 根据实际需要设置
                    activity.setValue(item.getCouponValue() != null ? item.getCouponValue().doubleValue() : null);
                    activity.setMinAmount(
                            item.getCouponMinAmount() != null ? item.getCouponMinAmount().doubleValue() : null);
                    activity.setStartTime(item.getActivityStartTime());
                    activity.setEndTime(item.getActivityEndTime());
                    activity.setActivityDesc(item.getActivityDescription());
                    // activity.setStatus is not available in Activity class, using activityStatus
                    // instead

                    skuDto.getActivityList().add(activity);
                }
            }
        }

        return new ArrayList<>(resultMap.values());
    }
}
